package com.zhq.boot.config;

import com.alibaba.druid.FastsqlException;
import com.zhq.boot.bean.Cat;
import com.zhq.boot.bean.Dog;
import com.zhq.boot.bean.User;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.context.annotation.Bean;

/**
 * @Project ：learn-spring-boot-3
 * @File ：AppConfig.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/3/27 17:17
 * @Description ：学习ConditionalOnXXX注解
 * 如果文件路径中有FastSqlException类，则创建一个Cat对象，
 * 否则创建一个Dog对象
 *
 * @BUG: 倒不是bug，遇到了一个很无语的问题。
 * 最开始的时候，传入的参数是com.alibaba.druid.FastSqlException，
 * 结果运行输出一直都是dog，很迷惑，明明我的pom.xml和其他文件的代码都没有问题啊，
 * 检查很多没任何收获，问了grok才知道在1.21.1版本后的druid库里没有FastSqlException了。。。
 *
 * The Druid library does contain exception-related classes,
 * such as com.alibaba.druid.sql.parser.ParserException,
 * but no class named FastSqlException exists in the com.alibaba.druid package or its subpackages in this version.
 *
 * 好吧，才发现原来是FastsqlException，人家s是小写。。。。。。
 */

@SpringBootConfiguration
public class AppConfig {

    @ConditionalOnClass(name="com.alibaba.druid.pool.DruidDataSource")
    @Bean
    public Cat cat01() {
        return new Cat();
    }

    @ConditionalOnMissingClass(value="com.alibaba.druid.pool.DruidDataSource")
    @Bean
    public Dog dog01() {
        return new Dog();
    }

    @ConditionalOnBean(value = Dog.class)
    @Bean
    public User zhangsan() {
        return new User();
    }

    @ConditionalOnMissingClass(value = "dog01")
    @Bean
    public User lisi() {
        return new User();
    }
}
